package com.ruoyi.system.domain;

import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;

/**
 * 桌台时长卡规则对象 table_time_card_rule
 *
 * @author ruoyi
 * @date 2025-05-22
 */
public class TableTimeCardRule extends BaseEntity
{
    private static final long serialVersionUID = 1L;

    /** 自增主键ID，唯一标识每条桌台时长卡规则 */
    private Long id;

    /** 门店名称（如“北京朝阳店”“上海浦东店”） */
    @Excel(name = "门店名称", readConverterExp = "如=“北京朝阳店”“上海浦东店”")
    private String storeName;

    /** 门店编号（唯一标识，如BJ-001、SH-002，支持业务系统集成） */
    @Excel(name = "门店编号", readConverterExp = "唯=一标识，如BJ-001、SH-002，支持业务系统集成")
    private String storeCode;

    /** 在用状态（1=启用，0=禁用，用于控制规则是否生效） */
    @Excel(name = "在用状态", readConverterExp = "1==启用，0=禁用，用于控制规则是否生效")
    private Integer isActive;

    /** 桌台时长卡名称（如“2小时欢唱卡”“全天畅玩卡”） */
    @Excel(name = "桌台时长卡名称", readConverterExp = "如=“2小时欢唱卡”“全天畅玩卡”")
    private String timeCardName;

    /** 桌台时长卡编号（唯一标识，如TTC20230001，支持批量管理） */
    @Excel(name = "桌台时长卡编号", readConverterExp = "唯=一标识，如TTC20230001，支持批量管理")
    private String timeCardCode;

    /** 时长卡类型（固定时长、不限时长、自定义时长） */
    @Excel(name = "时长卡类型", readConverterExp = "固=定时长、不限时长、自定义时长")
    private String timeCardType;

    /** 固定时长（分钟，仅当time_card_type=FIXED_DURATION时生效） */
    @Excel(name = "固定时长", readConverterExp = "分=钟，仅当time_card_type=FIXED_DURATION时生效")
    private Long fixedDurationMinutes;

    /** 不限时长描述（如“全天有效”，仅当time_card_type=UNLIMITED_DURATION时生效） */
    @Excel(name = "不限时长描述", readConverterExp = "如=“全天有效”，仅当time_card_type=UNLIMITED_DURATION时生效")
    private String unlimitedDurationDesc;

    /** 自定义时长规则（JSON格式，记录复杂规则，如分时段时长限制） */
    @Excel(name = "自定义时长规则", readConverterExp = "J=SON格式，记录复杂规则，如分时段时长限制")
    private String customDurationRule;

    /** 可用时段（JSON数组，记录时长卡可使用的具体时段，如[{"start_time":"09:00","end_time":"12:00"}]） */
    @Excel(name = "可用时段", readConverterExp = "J=SON数组，记录时长卡可使用的具体时段")
    private String validTimeSlots;

    /** 适用桌台类型（JSON数组，记录时长卡可用的桌台分类，如["KTV包厢","会议室"]） */
    @Excel(name = "适用桌台类型", readConverterExp = "J=SON数组，记录时长卡可用的桌台分类")
    private String applicableTableTypes;

    /** 每日最大使用次数（限制单张时长卡在单日的可用次数） */
    @Excel(name = "每日最大使用次数", readConverterExp = "限=制单张时长卡在单日的可用次数")
    private Long maxUsageCountPerDay;

    /** 最大并发使用数（限制单张时长卡可同时使用的桌台数量） */
    @Excel(name = "最大并发使用数", readConverterExp = "限=制单张时长卡可同时使用的桌台数量")
    private Long maxConcurrentUsage;

    /** 逻辑删除标记（1=已删除，0=未删除，用于软删除） */
    @Excel(name = "逻辑删除标记", readConverterExp = "1==已删除，0=未删除，用于软删除")
    private Integer isDeleted;

    /** 手机号 */
    @Excel(name = "手机号")
    private String phone;

    public void setId(Long id)
    {
        this.id = id;
    }

    public Long getId()
    {
        return id;
    }

    public void setStoreName(String storeName)
    {
        this.storeName = storeName;
    }

    public String getStoreName()
    {
        return storeName;
    }

    public void setStoreCode(String storeCode)
    {
        this.storeCode = storeCode;
    }

    public String getStoreCode()
    {
        return storeCode;
    }

    public void setIsActive(Integer isActive)
    {
        this.isActive = isActive;
    }

    public Integer getIsActive()
    {
        return isActive;
    }

    public void setTimeCardName(String timeCardName)
    {
        this.timeCardName = timeCardName;
    }

    public String getTimeCardName()
    {
        return timeCardName;
    }

    public void setTimeCardCode(String timeCardCode)
    {
        this.timeCardCode = timeCardCode;
    }

    public String getTimeCardCode()
    {
        return timeCardCode;
    }

    public void setTimeCardType(String timeCardType)
    {
        this.timeCardType = timeCardType;
    }

    public String getTimeCardType()
    {
        return timeCardType;
    }

    public void setFixedDurationMinutes(Long fixedDurationMinutes)
    {
        this.fixedDurationMinutes = fixedDurationMinutes;
    }

    public Long getFixedDurationMinutes()
    {
        return fixedDurationMinutes;
    }

    public void setUnlimitedDurationDesc(String unlimitedDurationDesc)
    {
        this.unlimitedDurationDesc = unlimitedDurationDesc;
    }

    public String getUnlimitedDurationDesc()
    {
        return unlimitedDurationDesc;
    }

    public void setCustomDurationRule(String customDurationRule)
    {
        this.customDurationRule = customDurationRule;
    }

    public String getCustomDurationRule()
    {
        return customDurationRule;
    }

    public void setValidTimeSlots(String validTimeSlots)
    {
        this.validTimeSlots = validTimeSlots;
    }

    public String getValidTimeSlots()
    {
        return validTimeSlots;
    }

    public void setApplicableTableTypes(String applicableTableTypes)
    {
        this.applicableTableTypes = applicableTableTypes;
    }

    public String getApplicableTableTypes()
    {
        return applicableTableTypes;
    }

    public void setMaxUsageCountPerDay(Long maxUsageCountPerDay)
    {
        this.maxUsageCountPerDay = maxUsageCountPerDay;
    }

    public Long getMaxUsageCountPerDay()
    {
        return maxUsageCountPerDay;
    }

    public void setMaxConcurrentUsage(Long maxConcurrentUsage)
    {
        this.maxConcurrentUsage = maxConcurrentUsage;
    }

    public Long getMaxConcurrentUsage()
    {
        return maxConcurrentUsage;
    }

    public void setIsDeleted(Integer isDeleted)
    {
        this.isDeleted = isDeleted;
    }

    public Integer getIsDeleted()
    {
        return isDeleted;
    }

    public void setPhone(String phone)
    {
        this.phone = phone;
    }

    public String getPhone()
    {
        return phone;
    }

    @Override
    public String toString() {
        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
                .append("id", getId())
                .append("storeName", getStoreName())
                .append("storeCode", getStoreCode())
                .append("isActive", getIsActive())
                .append("timeCardName", getTimeCardName())
                .append("timeCardCode", getTimeCardCode())
                .append("timeCardType", getTimeCardType())
                .append("fixedDurationMinutes", getFixedDurationMinutes())
                .append("unlimitedDurationDesc", getUnlimitedDurationDesc())
                .append("customDurationRule", getCustomDurationRule())
                .append("validTimeSlots", getValidTimeSlots())
                .append("applicableTableTypes", getApplicableTableTypes())
                .append("maxUsageCountPerDay", getMaxUsageCountPerDay())
                .append("maxConcurrentUsage", getMaxConcurrentUsage())
                .append("createTime", getCreateTime())
                .append("updateTime", getUpdateTime())
                .append("isDeleted", getIsDeleted())
                .append("phone", getPhone())
                .toString();
    }
}
